import JSEncrypt from 'jsencrypt'
import { getPublicKey } from '@/api/login'

/**
 * RSA加密工具类
 */
export class CryptoUtil {
  static publicKey = ''
  static encryptor = null

  /**
   * 初始化加密器
   * @returns {Promise<void>}
   */
  static async init() {
    if (!this.encryptor) {
      try {
        // 获取公钥
        const result = await getPublicKey()
        if (result.code === 200) {
          this.publicKey = result.data
          // 创建加密器
          this.encryptor = new JSEncrypt()
          this.encryptor.setPublicKey(this.publicKey)
        } else {
          console.error('获取公钥失败:', result.msg)
        }
      } catch (error) {
        console.error('初始化加密器失败:', error)
        throw error
      }
    }
  }

  /**
   * 加密数据
   * @param {string} password - 要加密的密码
   * @returns {string} - 加密后的数据
   */
  static encrypt(password) {
    if (!this.encryptor) {
      throw new Error('请先初始化加密器')
    }
    const encrypted = this.encryptor.encrypt(password)
    if (!encrypted) {
      throw new Error('加密失败')
    }
    return encrypted
  }
}

/**
 * 登录时使用示例:
 *
 * import { CryptoUtil } from '@/utils/crypto'
 *
 * const handleLogin = async (loginForm) => {
 *   try {
 *     // 1. 初始化加密器
 *     await CryptoUtil.init()
 *
 *     // 2. 加密密码
 *     const encryptedPassword = CryptoUtil.encrypt(loginForm.password)
 *
 *     // 3. 发送登录请求
 *     const loginData = {
 *       username: loginForm.username,
 *       password: encryptedPassword,
 *       code: loginForm.code,
 *       uuid: loginForm.uuid
 *     }
 *
 *     const res = await login(loginData)
 *     // 处理登录响应...
 *
 *   } catch (error) {
 *     console.error('登录失败:', error)
 *     // 错误提示...
 *   }
 * }
 */
